How to write Microsoft Audio Compression Manager Codec (Installable Driver)
Создание проекта
Для начала разработки кодека создайте в MS Visual Studio проект типа DLL.
Структура кодека(драйвера)
Инстоллируемый драйвер это бинарный файл, который экспортирует вызов DriverProc.
В DriverProc приходят все сообщения, которые ACM посылает кодеку.
Рекомендуется в этой подпрограмме не размещать какой-либо код помимо switch с вызовами к сервисным функциям кодека.
LRESULT WINAPI DriverProc(args)
{
switch(uMsg)
{
case MSG_XXX:
return ServiceRoutine_XXX(args);
break;
case MSG_YYY:
ServiceRoutine_YYY(args);
break;
...
}
return DefDriverProc(args);
}
Также драйвер должен реализовывать поток(Thread) и "очередь запросов на обработку данных", в случае, если Вы планируете поддерживать асинхронный режим работы с драйвером.
Сообщения(windows messages) ACM для кодека(драйвера)
Стандартные сообщения инстоллируемого драйвера
О них достаточно подробно написано в MSDN. Дублировать эту информацию я не буду.
Специфические для ACM сообщения
Эти сообщения начинаются со значения 0x6000. В заголовках они не описаны (кроме 2х базовых).
Взаимодействие кодека и ACM
Загрузка и выгрузка кодека происходит стандартно, как для любого инстоллируемого драйвера.
Между этими "стандартными" процедурами есть стадии специфические для ACM.
ACM запрашивает информацию о кодеке
ACM запрашивает информацию о форматах, по числу указанному в (1)
ACM запрашивает информацию о фильтрах, по числу указанному в (1)
Эта информация будет использоваться в ответах на запросы приложения на перечисление кодеков, форматов, тэгов форматов, фильтров, НО уже БЕЗ обращения к драйверу т.к. ACM кэширует у себя эту информацию.
В большинстве случаев возвращать какое-либо значение после выполнения запроса на обработку сообщения не требуется, за исключением случаев, когда необходимо вернуть код ошибки.
Хэндлы
Выделением хэндлов занимается ACM и передает в драйвер при обращениях, а драйвер лишь использует их для идентификации внутренних сущностей.
Пример - код ACM Dummy Codec
В этом проекте Вы найдёте заголовок с основными сообщениями из диапазона ACM User Messages и простые обработчики этих сообщений в теле DriverProc Скачать код ACM Dummy Codec версии 1.0 ( 17K )